// cloud-bg-library.js
const app = getApp()

Page({
  data: {
    // 背景列表数据
    backgrounds: [],
    filteredBackgrounds: [],
    
    // 搜索和筛选
    searchKeyword: '',
    currentFilter: 'all',
    
    // 分页
    currentPage: 1,
    pageSize: 12,
    totalPages: 1,
    
    // 弹窗状态
    showPreviewModal: false,
    showDeleteModal: false,
    previewBg: null,
    deleteBg: null,
    
    // 加载状态
    loading: false,
    
    // 用户信息
    userInfo: null,
    isChef: false // 实际表示"是否可以删除背景"（chef或admin）
  },

  onLoad() {
    console.log('云端背景库页面加载')
    
    // 获取用户信息和权限
    const userInfo = app.globalData.userInfo
    const userRole = app.globalData.userRole
    const canDelete = userRole === 'chef' || userRole === 'admin' || (userInfo && (userInfo.role === 'chef' || userInfo.role === 'admin'))
    
    console.log('用户权限检查:', {
      userInfo,
      userRole,
      canDelete
    })
    
    this.setData({
      userInfo: userInfo,
      isChef: canDelete // 重用isChef变量，但实际含义是"可以删除"
    })
    
    // 加载背景列表
    this.loadBackgrounds()
  },

  onShow() {
    // 页面显示时重新检查用户权限
    const userInfo = app.globalData.userInfo
    const userRole = app.globalData.userRole
    const canDelete = userRole === 'chef' || userRole === 'admin' || (userInfo && (userInfo.role === 'chef' || userInfo.role === 'admin'))
    
    console.log('onShow - 用户权限检查:', {
      userInfo,
      userRole,
      canDelete,
      currentIsChef: this.data.isChef
    })
    
    // 更新权限状态
    if (this.data.isChef !== canDelete) {
      console.log('权限状态变化，更新界面')
      this.setData({
        userInfo: userInfo,
        isChef: canDelete
      })
    }
    
    // 页面显示时刷新数据
    if (this.data.backgrounds.length > 0) {
      this.refreshList()
    }
  },

  // 加载背景列表
  async loadBackgrounds() {
    try {
      this.setData({ loading: true })
      
      console.log('开始加载云端背景列表...')
      
      const result = await wx.cloud.callFunction({
        name: 'getAllBackgrounds',
        data: {
          page: this.data.currentPage,
          pageSize: this.data.pageSize
        }
      })
      
      console.log('获取背景列表结果:', result)
      
      if (result.result && result.result.success) {
        const backgrounds = result.result.data || []
        
        // 格式化数据
        const formattedBackgrounds = backgrounds.map(bg => ({
          ...bg,
          uploadDate: this.formatDate(bg.updatedAt || bg.createTime),
          uploaderName: bg.updatedBy || '未知用户'
        }))
        
        this.setData({
          backgrounds: formattedBackgrounds,
          totalPages: Math.ceil((result.result.total || 0) / this.data.pageSize)
        })
        
        // 应用筛选
        this.applyFilter()
        
        console.log('背景列表加载成功，共', formattedBackgrounds.length, '张')
      } else {
        throw new Error(result.result?.error || '获取背景列表失败')
      }
      
    } catch (error) {
      console.error('加载背景列表失败:', error)
      
      // 检查是否是云函数未部署的错误
      if (error.message.includes('FunctionName parameter could not be found') || 
          error.message.includes('FUNCTION_NOT_FOUND') ||
          error.errCode === -501000) {
        
        wx.showModal({
          title: '云函数未部署',
          content: '请先部署云函数后再使用云端背景库功能。\n\n部署步骤：\n1. 右键点击 cloudfunctions/getAllBackgrounds\n2. 选择"上传并部署：云端安装依赖"\n3. 重复上述步骤部署其他云函数',
          showCancel: false,
          confirmText: '知道了'
        })
        
        // 显示空状态，提示用户部署云函数
        this.setData({
          backgrounds: [],
          filteredBackgrounds: [],
          totalPages: 1
        })
        
      } else {
        wx.showToast({
          title: '加载失败',
          icon: 'error'
        })
      }
    } finally {
      this.setData({ loading: false })
    }
  },

  // 搜索输入
  onSearchInput(e) {
    this.setData({
      searchKeyword: e.detail.value
    })
  },

  // 执行搜索
  onSearch() {
    this.applyFilter()
  },

  // 设置筛选条件
  setFilter(e) {
    const filter = e.currentTarget.dataset.filter
    this.setData({
      currentFilter: filter,
      currentPage: 1
    })
    this.applyFilter()
  },

  // 应用筛选
  applyFilter() {
    let filtered = [...this.data.backgrounds]
    
    // 按筛选条件过滤
    if (this.data.currentFilter === 'active') {
      filtered = filtered.filter(bg => bg.isActive)
    } else if (this.data.currentFilter === 'recent') {
      // 按时间排序，取最近上传的
      filtered.sort((a, b) => new Date(b.updatedAt || b.createTime) - new Date(a.updatedAt || a.createTime))
      filtered = filtered.slice(0, 10)
    }
    
    // 按搜索关键词过滤
    if (this.data.searchKeyword.trim()) {
      const keyword = this.data.searchKeyword.toLowerCase()
      filtered = filtered.filter(bg => 
        (bg.name && bg.name.toLowerCase().includes(keyword)) ||
        (bg.uploaderName && bg.uploaderName.toLowerCase().includes(keyword))
      )
    }
    
    this.setData({
      filteredBackgrounds: filtered
    })
  },

  // 预览背景
  previewBackground(e) {
    const bg = e.currentTarget.dataset.bg
    this.setData({
      previewBg: bg,
      showPreviewModal: true
    })
  },

  // 关闭预览弹窗
  closePreviewModal() {
    this.setData({
      showPreviewModal: false,
      previewBg: null
    })
  },

  // 使用预览的背景
  usePreviewBackground() {
    if (this.data.previewBg) {
      this.useBackground({ currentTarget: { dataset: { bg: this.data.previewBg } } })
      this.closePreviewModal()
    }
  },

  // 使用背景
  async useBackground(e) {
    const bg = e.currentTarget.dataset.bg
    
    try {
      wx.showLoading({
        title: '设置背景中...'
      })
      
      console.log('准备使用背景:', bg)
      
      // 调用云函数设置背景
      const result = await wx.cloud.callFunction({
        name: 'setActiveBackground',
        data: {
          backgroundId: bg._id
        }
      })
      
      console.log('设置背景结果:', result)
      
      if (result.result && result.result.success) {
        // 更新本地存储
        wx.setStorageSync('welcomeBgImage', bg.imageUrl)
        
        // 通知首页更新背景
        this.notifyHomePageUpdate(bg.imageUrl)
        
        wx.hideLoading()
        wx.showToast({
          title: '背景已设置',
          icon: 'success'
        })
        
        // 刷新列表
        this.refreshList()
        
      } else {
        throw new Error(result.result?.error || '设置背景失败')
      }
      
    } catch (error) {
      console.error('使用背景失败:', error)
      
      wx.hideLoading()
      
      // 检查是否是云函数未部署的错误
      if (error.message.includes('FunctionName parameter could not be found') || 
          error.message.includes('FUNCTION_NOT_FOUND') ||
          error.errCode === -501000) {
        
        wx.showModal({
          title: '云函数未部署',
          content: '请先部署 setActiveBackground 云函数：\n\n1. 右键点击 cloudfunctions/setActiveBackground\n2. 选择"上传并部署：云端安装依赖"',
          showCancel: false,
          confirmText: '知道了'
        })
      } else {
        wx.showToast({
          title: '设置失败',
          icon: 'error'
        })
      }
    }
  },

  // 删除背景
  deleteBackground(e) {
    const bg = e.currentTarget.dataset.bg
    
    // 检查权限 - chef和admin都可以删除
    if (!this.data.isChef) {
      wx.showToast({
        title: '只有厨师和管理员可以删除背景',
        icon: 'none'
      })
      return
    }
    
    // 如果是当前使用的背景，提示用户
    if (bg.isActive) {
      wx.showModal({
        title: '删除当前背景',
        content: '这是当前正在使用的背景，删除后将自动切换到默认背景。确定要删除吗？',
        success: (res) => {
          if (res.confirm) {
            this.showDeleteModal(bg)
          }
        }
      })
    } else {
      this.showDeleteModal(bg)
    }
  },

  // 显示删除确认弹窗
  showDeleteModal(bg) {
    this.setData({
      deleteBg: bg,
      showDeleteModal: true
    })
  },

  // 取消删除
  cancelDelete() {
    this.setData({
      showDeleteModal: false,
      deleteBg: null
    })
  },

  // 确认删除
  async confirmDelete() {
    const bg = this.data.deleteBg
    if (!bg) return
    
    try {
      wx.showLoading({
        title: '删除中...'
      })
      
      console.log('准备删除背景:', bg)
      
      // 调用云函数删除背景
      const result = await wx.cloud.callFunction({
        name: 'deleteBackground',
        data: {
          backgroundId: bg._id
        }
      })
      
      console.log('删除背景结果:', result)
      
      if (result.result && result.result.success) {
        // 如果删除的是当前使用的背景，清除本地存储
        if (bg.isActive) {
          wx.removeStorageSync('welcomeBgImage')
          this.notifyHomePageUpdate(null)
        }
        
        wx.hideLoading()
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        })
        
        // 刷新列表
        this.refreshList()
        
      } else {
        throw new Error(result.result?.error || '删除背景失败')
      }
      
    } catch (error) {
      console.error('删除背景失败:', error)
      
      wx.hideLoading()
      
      // 检查是否是云函数未部署的错误
      if (error.message.includes('FunctionName parameter could not be found') || 
          error.message.includes('FUNCTION_NOT_FOUND') ||
          error.errCode === -501000) {
        
        wx.showModal({
          title: '云函数未部署',
          content: '请先部署 deleteBackground 云函数：\n\n1. 右键点击 cloudfunctions/deleteBackground\n2. 选择"上传并部署：云端安装依赖"',
          showCancel: false,
          confirmText: '知道了'
        })
      } else {
        wx.showToast({
          title: '删除失败',
          icon: 'error'
        })
      }
    } finally {
      this.setData({
        showDeleteModal: false,
        deleteBg: null
      })
    }
  },

  // 通知首页更新背景
  notifyHomePageUpdate(imageUrl) {
    console.log('准备通知首页更新背景:', imageUrl)
    
    // 通过全局事件总线通知首页
    if (app.globalData.eventBus) {
      app.globalData.eventBus.emit('updateWelcomeBackground', imageUrl)
    } else {
      // 备用方案：直接更新首页
      this.updateHomePageDirectly(imageUrl)
    }
  },

  // 直接更新首页（备用方案）
  updateHomePageDirectly(imageUrl) {
    try {
      const pages = getCurrentPages()
      const homePage = pages.find(page => page.route === 'pages/index/index')
      
      if (homePage && homePage.setData) {
        homePage.setData({
          welcomeBgImage: imageUrl
        })
      }
    } catch (error) {
      console.error('直接更新首页失败:', error)
    }
  },

  // 跳转到上传页面
  goToUpload() {
    wx.navigateBack()
  },

  // 刷新列表
  refreshList() {
    this.loadBackgrounds()
  },

  // 跳转到指定页面
  goToPage(e) {
    const page = e.currentTarget.dataset.page
    
    if (page < 1 || page > this.data.totalPages) {
      return
    }
    
    this.setData({
      currentPage: page
    })
    
    this.loadBackgrounds()
  },

  // 格式化日期
  formatDate(dateString) {
    if (!dateString) return '未知时间'
    
    try {
      const date = new Date(dateString)
      const now = new Date()
      const diff = now - date
      
      // 如果是今天
      if (diff < 24 * 60 * 60 * 1000 && date.toDateString() === now.toDateString()) {
        return '今天 ' + date.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
      }
      
      // 如果是昨天
      const yesterday = new Date(now)
      yesterday.setDate(yesterday.getDate() - 1)
      if (date.toDateString() === yesterday.toDateString()) {
        return '昨天 ' + date.toLocaleTimeString('zh-CN', { hour: '2-digit', minute: '2-digit' })
      }
      
      // 其他时间
      return date.toLocaleDateString('zh-CN', { 
        year: 'numeric', 
        month: '2-digit', 
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit'
      })
    } catch (error) {
      return '未知时间'
    }
  },

  // 阻止事件冒泡
  stopPropagation() {
    // 阻止事件冒泡
  }
}) 